package edu.gxmzu.task.controller;


import edu.gxmzu.task.models.TaskBoardModel;
import edu.gxmzu.task.models.WorkModel;
import edu.gxmzu.task.params.SearchTaskParam;
import edu.gxmzu.task.params.UpdateAdminWorkParam;
import edu.gxmzu.task.params.UpdateUserWorkParam;
import edu.gxmzu.task.service.WordService;
import edu.gxmzu.task.utils.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;


@Tag(name = "任务模块", description = "关于任务的相关操作")
@RestController
@RequestMapping("/work")
@Slf4j
public class WordController {
    @Resource
    private WordService wordService;


//    @GetMapping("/getCompleteWork")
//    @Operation(summary = "查询已办任务")
//    public Result getCompleteWorkByUserId(Long usrId){
//        if(usrId == null){
//            return Result.fail("参数错误，请检查参数");
//        }
//        try {
//            List<WorkModel> workModels = wordService.getWorkByUserId(usrId);
//            if(!CollectionUtils.isEmpty(workModels)){
//                return Result.ok("查询成功",workModels);
//            }else {
//                return Result.fail("无任务");
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        return null;
//    }

    /**
     * @author 欧嘉淇
     */
    @PostMapping("/updateUserWork")
    @Operation(summary = "用户编辑任务", description = "此处为准<br>" +
            "{" +
            "<br/>id: 任务ID（选填，通常用于唯一标识任务）<br/>" +
            "<br/>userId: 用户ID（选填，用于标识创建或关联该任务的用户）<br/>" +
            "<br/>attachmentId: 附件ID（选填，如果任务有关联的附件）<br/>" +
            "<br/>title: 任务标题（必填，用于描述任务的主要内容）<br/>" +
            "<br/>content: 任务内容（必填，详细的任务描述或执行步骤）<br/>" +
            "<br/>require: 任务要求（选填，对任务执行者的特殊要求或说明）<br/>" +
            "<br/>updateTime: 更新时间，传时间戳（选填，记录任务最后一次被更新的时间）<br/>" +
            "<br/>endTime: 截止时间，传时间戳（选填，任务应完成的日期和时间）<br/>" +
            "<br/>file: 附件二进制数据<br/>" +
            "}")
    public Result updateUserWork(UpdateUserWorkParam updateUserWorkParam) throws IOException {
        if (ObjectUtils.isEmpty(updateUserWorkParam)){
            return Result.fail("数据为空，请检查数据的完整性");
        }
        int i  = wordService.updateUserWork(updateUserWorkParam);
        if (i > 0 ){
            return Result.ok("修改成功");
        }else {
            return Result.fail("系统异常,修改失败");
        }
    }

    /**
     * @author 欧嘉淇
     */
    @PostMapping("/updateAdminWork")
    @Operation(summary = "管理员编辑任务",description = "此处为准<br>"+
            "{"+
            "<br/>id: 任务ID（选填，通常用于唯一标识任务）<br/>"+
            "<br/>userId: 用户ID（选填，用于标识创建或关联该任务的用户）<br/>"+
            "<br/>attachmentId: 附件ID（选填，如果任务有关联的附件）<br/>"+
            "<br/>title: 任务标题（必填，用于描述任务的主要内容）<br/>"+
            "<br/>content: 任务内容（必填，详细的任务描述或执行步骤）<br/>"+
            "<br/>require: 任务要求（选填，对任务执行者的特殊要求或说明）<br/>"+
            "<br/>updateTime: 更新时间，传时间戳（选填，记录任务最后一次被更新的时间）<br/>"+
            "<br/>endTime: 截止时间，传时间戳（选填，任务应完成的日期和时间）<br/>"+
            "<br/>file: 附件二进制数据<br/>"+
            "}")
    public Result updateAdminWork(UpdateAdminWorkParam updateAdminWorkParam) throws IOException {
        if (ObjectUtils.isEmpty(updateAdminWorkParam)){
            return Result.fail("数据为空，请检查数据的完整性");
        }
        int i  = wordService.updateAdminWork(updateAdminWorkParam);
        if (i > 0 ){
            return Result.ok("修改成功");
        }else {
            return Result.fail("系统异常,修改失败");
        }
    }

    @GetMapping("/getAllWorks")
    @Operation(summary = "用户首页报表任务查询")
    public Result getAllWorks(String userId) throws IOException {
        if (!StringUtils.hasText(userId)){
            return Result.fail("数据为空，请检查数据的完整性");
        }
        TaskBoardModel taskBoardModel = wordService.getAllWorks(userId);
        if (!ObjectUtils.isEmpty(taskBoardModel) ){
            return Result.ok("查询成功",taskBoardModel);
        }else {
            return Result.fail("系统异常,查询失败");
        }
    }

    @PostMapping("/SearchTask")
    @Operation(summary = "用户查询任务",description = "此处为准<br/>"+
            "{<br>"+
            "userId: 用户id（选填）<br/>"+
            "title:任务名称（选填）<br/>"+
            "content:任务内容（选填）<br/>"+
            "createTime:创建时间，传时间戳（选填）<br/>"+
            "endTime:截止时间，传时间戳（选填）<br/>"+
"}")
    public Result SearchTask(@RequestBody SearchTaskParam searchTaskParam) throws IOException {
        System.out.println("实体："+searchTaskParam.toString());
        if (ObjectUtils.isEmpty(searchTaskParam)){
            return Result.fail("数据为空，请检查数据的完整性");
        }
        List<WorkModel> workModels = wordService.SearchTask(searchTaskParam);
        if(!CollectionUtils.isEmpty(workModels)){
            return Result.ok("查询成功",workModels);
        }else {
            return Result.fail("无任务");
        }
    }
}
